In diesem Kapitel schauen wir uns den Datenbankzugriff in PHP an. PHP bietet fertige Schnittstellen zu vielen Datenbanken: Zu MySQL mit einem komplizierten Lizensierungsmodell und der Alternative MariaDB. Davon bekommen Sie als Programmierer natürlich nichts mit. Zu PostgreSQL, kostenlos unter BSD-Lizenz. Zu SQL-Lite als Open Source und zu vielen kommerziellen Datenbanken wie von IBM, Microsoft oder SAP. Der Datenbankzugriff via MySQL-Extension ist die historisch älteste Schnittstelle. Sie ist rein prozedural und verwendet keine Objekte und wird empfohlen für alte MySQL-Versionen vor 4.1.3. Die Erweiterung wurde in PHP 5.5 als veraltet markiert und in PHP 7 komplett entfernt. Aus diesem Grund wird diese Erweiterung hier nicht genauer betrachtet. Der Datenbankzugriff via MySQLi-Extension wird oft auch als MySQL improved bezeichnet. Sie bietet eine prozedurale und objektorientierte Schnittstelle und wird für neuere MySQL-Versionen empfohlen. Sie hat viele Verbesserungen wie Prepared Statements, Multiple Statements, Transaktionen und verbessertes Debugging. Dies ist heute state-of-the-art. Hier sehen Sie die Verwendung von MySQLi zur Datenbankanbindung und den Ablauf bei der Nutzung von SQL-Statements. Es erklärt die Schritte für den Aufbau einer Datenbankverbindung und die Ausführung eines SQL-Statements. Zunächst wird eine Verbindung zur Datenbank hergestellt. Dafür wird eine neue Instanz von MySQLi mit den entsprechenden Verbindungsparametern, wie Host, Benutzername, Passwort und Datenbankname, erstellt. Danach wird der Zeichensatz der Verbindung auf UTF-8 gesetzt. Anschließend wird das SQL-Statement vorbereitet. Hierbei wird ein Statement-Objekt erstellt, das später ausgeführt werden kann. Danach werden Parameter und Rückgabewerte an das Statement gebunden, also die Werte, die in das SQL-Statement eingefügt werden sollen, sowie die Variablen, in die die Ergebnisse geschrieben werden. Zum Schluss wird das vorbereitete SQL-Statement ausgeführt. Zunächst wird über die Ergebnismenge iteriert. Das bedeutet, dass die einzelnen Datensätze, die von der Datenbank zurückgegeben wurden, nacheinander verarbeitet werden. Dies geschieht in einer Schleife, die so lange läuft, wie noch Datensätze vorhanden sind. Nachdem die Ergebnismenge verarbeitet wurde, wird das Statement geschlossen, um die Ressourcen freizugeben. Abschließend wird auch die Datenbankverbindung geschlossen, um die Verbindung zur Datenbank ordnungsgemäß zu beenden. Hier sehen Sie ein lesendes Beispiel für den Datenbankzugriff mit der MySQLi-Extension. Zunächst wird eine Verbindung zur Datenbank hergestellt, indem eine neue MySQLi-Instanz mit den Verbindungsparametern wie „localhost“, Benutzername, Passwort und Datenbankname erstellt wird. Danach wird der Zeichensatz der Verbindung auf UTF-8 gesetzt, um die korrekte Codierung der Daten sicherzustellen. Im nächsten Schritt wird ein SQL-Statement vorbereitet, das die ID, den Nachnamen und den Vornamen aus der Tabelle „studenten“ auswählt, wobei der Nachname einem bestimmten Wert entsprechen muss. Der Parameter für den Nachnamen wird dabei an das Statement gebunden, in diesem Fall der Wert „Meier“. Anschließend werden die Variablen für die Ergebnismenge gebunden, um die abgerufenen Daten in die entsprechenden Variablen zu speichern. Schließlich wird das vorbereitete Statement ausgeführt. Abschließend wird über die Ergebnismenge iteriert, um die abgerufenen Daten auszugeben. Während der Iteration werden die Werte für ID, Nachname und Vorname ausgegeben. Nachdem alle Daten ausgegeben wurden, wird das Statement geschlossen, um die Ressourcen freizugeben. Abschließend wird auch die Verbindung zur Datenbank geschlossen, um die Verbindung ordnungsgemäß zu beenden. Dies ist ein schreibendes Beispiel für den Datenbankzugriff mit der MySQLi-Extension. Zuerst wird eine Verbindung zur Datenbank hergestellt, wobei die Verbindungsparameter wie „localhost“, Benutzername, Passwort und der Name der Datenbank angegeben werden. Danach wird der Zeichensatz der Verbindung auf UTF-8 gesetzt, um die Daten korrekt zu codieren. Anschließend wird ein SQL-Statement vorbereitet, das Daten in die Tabelle „eingaben“ einfügt. Dabei werden die Spalten „user“ und „pass“ mit Werten befüllt. Diese Werte werden dann an das Statement gebunden, wobei zwei String-Parameter, Benutzername und Kennwort, übergeben werden. Das Statement wird anschließend ausgeführt, um die Daten in die Datenbank zu schreiben. Nachdem das Statement erfolgreich ausgeführt wurde, werden das Statement und die Datenbankverbindung geschlossen, um die Ressourcen freizugeben und die Verbindung ordnungsgemäß zu beenden. Als Alternative dazu gibt es noch den Datenbankzugriff via PDO-Klassen. PHP Data Objects abstrahieren vollständig von der Datenbank und bilden damit eine einheitliche Schnittstelle unabhängig von der Datenbank. Sie erlauben den Austausch der Datenbank mit geringem Aufwand und schränken die verfügbare Funktionalität durch den kleinsten gemeinsamen Nenner ein. Dabei ist die Klasse PDO für die Verwaltung und den Aufbau von Verbindungen zuständig. Dazu gehört auch die Konfiguration der Verbindung, wie zum Beispiel die Verwendung von SSL. Die Klasse PDO-Statement ist für die Verwaltung von Abfragen zuständig, insbesondere für vorbereitete Statements (prepared statements). Außerdem ermöglicht sie die Verknüpfung von Variablen mit den Abfragen und verwaltet die Ergebnisse einer Anfrage. Wichtig ist, dass ein PDO-Statement nach der Verwendung wieder freigegeben werden muss, um Ressourcen zu schonen. Nun sehen Sie die Verwendung von PDO zur Datenbankanbindung. Zuerst wird eine Verbindung zur Datenbank aufgebaut, indem eine neue PDO-Instanz erstellt wird. Dabei werden die Verbindungsdetails wie Host, Datenbankname, Benutzername und Passwort übergeben. Anschließend wird ein SQL-Statement vorbereitet. In diesem Schritt wird das Statement erstellt, das später ausgeführt wird. Danach werden die Parameter gesetzt, hier wird der Wert „Meier“ an die erste Position des vorbereiteten Statements gebunden. Schließlich wird das vorbereitete Statement ausgeführt, um die gewünschte Operation in der Datenbank durchzuführen. Nun folgt der Abschluss der Verwendung von PDO für den Datenbankzugriff. Sie sehen, wie über die Ergebnismenge iteriert wird, um die abgerufenen Daten zu verarbeiten. Während der Iteration wird jeder Datensatz einzeln aus der Ergebnismenge geholt. Nach der Verarbeitung wird das Statement geschlossen, indem die zugehörige Variable auf null gesetzt wird, um die Ressourcen freizugeben. Abschließend wird auch die Datenbankverbindung geschlossen, indem die entsprechende Variable ebenfalls auf null gesetzt wird. Nun ein lesendes Beispiel für den Datenbankzugriff mit PDO-Klassen. Zuerst wird eine Verbindung zur Datenbank hergestellt, indem eine neue PDO-Instanz mit den Verbindungsparametern wie Host, Datenbankname, Benutzername und Passwort erstellt wird. Danach wird ein SQL-Statement vorbereitet, das die ID, den Nachnamen und den Vornamen aus der Tabelle „studenten“ auswählt, wobei der Nachname einem bestimmten Wert entsprechen muss. Der Parameter „Meier“ wird dabei an das Statement gebunden. Anschließend wird das vorbereitete Statement ausgeführt. Über die Ergebnismenge wird iteriert, und die abgerufenen Daten werden ausgegeben, indem die ID, der Nachname und der Vorname für jeden Datensatz ausgegeben werden. Zum Schluss werden sowohl das Statement als auch die Datenbankverbindung geschlossen, indem die entsprechenden Variablen auf null gesetzt werden, um die Ressourcen freizugeben und die Verbindung ordnungsgemäß zu beenden. Und zum Abschluss ein schreibendes Beispiel für den Datenbankzugriff mit PDO-Klassen. Zuerst wird eine Verbindung zur Datenbank hergestellt, indem eine neue PDO-Instanz mit den Verbindungsparametern wie Host, Datenbankname, Benutzername und Passwort erstellt wird. Zusätzlich wird ein Attribut gesetzt, um den Fehlerberichtmodus auf „Exception“ festzulegen, damit im Fehlerfall eine Ausnahme geworfen wird. Anschließend wird ein SQL-Statement vorbereitet, das Daten in die Tabelle „eingaben“ einfügt. Hierbei werden die Spalten „user“ und „pass“ mit Werten befüllt. Die Werte für den Benutzernamen und das Kennwort werden als Parameter an das Statement gebunden. Schließlich wird das Statement ausgeführt, um die Daten in die Datenbank zu schreiben.